#include "font.h"

LuaFont::LuaFont(const char *filename, int fontSize, int mode){
	m_font = gge::Font_Create(filename,fontSize,mode);
}

LuaFont::~LuaFont(){
	gge::System_Log("FontRelease:%p",m_font);

	GGE_RELEASE(m_font);
}
UINT		LuaFont::Clone() {
	return (UINT)m_font->Clone();
}
void		LuaFont::Render(float x, float y, const char *str) {
	m_font->Render(x,y,str);
}
void		LuaFont::SetColor(gge::gUInt color){
	m_font->SetColor(color);
}
void		LuaFont::SetZ(float z){ 
	m_font->SetZ(z);
}
void		LuaFont::SetBlendMode(int blend){
	m_font->SetBlendMode(blend);
}
void		LuaFont::SetLineWidth(int width){
	m_font->SetLineWidth(width);
}
void		LuaFont::SetCharSpace(int width){
	m_font->SetCharSpace(width);
}
void		LuaFont::SetLineSpace(int width){
	m_font->SetLineSpace(width);
}
void		LuaFont::SetCharNum(int width){
	m_font->SetCharNum(width);
}
void		LuaFont::SetAlign(int width){
	m_font->SetAlign(width);
}
void		LuaFont::SetShadowColor(gge::gUInt width){
	m_font->SetShadowColor(width);
}
void		LuaFont::SetBorderColor(gge::gUInt width){
	m_font->SetBorderColor(width);
}
gge::gUInt	LuaFont::GetColor(){
	return m_font->GetColor();
}
int			LuaFont::GetBlendMode() {
	return m_font->GetBlendMode();
}
int			LuaFont::GetLineWidth() {
	return m_font->GetLineWidth();
}
int			LuaFont::GetCharSpace() {
	return m_font->GetCharSpace();
}
int			LuaFont::GetLineSpace() {
	return m_font->GetLineSpace();
}
int			LuaFont::GetFontHight() {
	return m_font->GetFontHight();
}
int			LuaFont::GetFontSize() {
	return m_font->GetFontSize();
}
int			LuaFont::GetCharNum() {
	return m_font->GetCharNum();
}
int			LuaFont::GetAlign() {
	return m_font->GetAlign();
}
gge::gUInt	LuaFont::GetShadowColor() {
	return m_font->GetShadowColor();
}
gge::gUInt	LuaFont::GetBorderColor() {
	return m_font->GetBorderColor();
}
LuaTable	LuaFont::GetStringInfo(const char *str){
	gge::ggeFont::StringInfo strinfo;
	m_font->GetStringInfo(str,strinfo);
	LuaTable t(L);
	t.set("Width",strinfo.Width);
	t.set("Height",strinfo.Height);
	return t;
}
UINT		LuaFont::GetP(){ 
	return (UINT)m_font;
}
int		LuaFont::GetRefCount(){ 
	return m_font->GetRefCount();
}
void	LuaFont::AddRef(){ 
	return m_font->AddRef();
}
void	LuaFont::Release(){ 
	GGE_RELEASE(m_font);
}
int REG_GGE_Font(lua_State * L){
	const char* gname = "__ggeFont";
	ELuna::registerClass<LuaFont>(L, gname,  ELuna::constructor<LuaFont,const char *, int , int >);

	ELuna::registerMethod<LuaFont>(L, "Clone", &LuaFont::Clone);
	ELuna::registerMethod<LuaFont>(L, "Render", &LuaFont::Render);
	ELuna::registerMethod<LuaFont>(L, "SetColor", &LuaFont::SetColor);
	ELuna::registerMethod<LuaFont>(L, "SetZ", &LuaFont::SetZ);
	ELuna::registerMethod<LuaFont>(L, "SetBlendMode", &LuaFont::SetBlendMode);
	ELuna::registerMethod<LuaFont>(L, "SetLineWidth", &LuaFont::SetLineWidth);
	ELuna::registerMethod<LuaFont>(L, "SetCharSpace", &LuaFont::SetCharSpace);
	ELuna::registerMethod<LuaFont>(L, "SetLineSpace", &LuaFont::SetLineSpace);
	ELuna::registerMethod<LuaFont>(L, "SetCharNum", &LuaFont::SetCharNum);
	ELuna::registerMethod<LuaFont>(L, "SetAlign", &LuaFont::SetAlign);
	ELuna::registerMethod<LuaFont>(L, "SetShadowColor", &LuaFont::SetShadowColor);
	ELuna::registerMethod<LuaFont>(L, "SetBorderColor", &LuaFont::SetBorderColor);

	ELuna::registerMethod<LuaFont>(L, "GetColor", &LuaFont::GetColor);
	ELuna::registerMethod<LuaFont>(L, "GetBlendMode", &LuaFont::GetBlendMode);
	ELuna::registerMethod<LuaFont>(L, "GetLineWidth", &LuaFont::GetLineWidth);
	ELuna::registerMethod<LuaFont>(L, "GetCharSpace", &LuaFont::GetCharSpace);
	ELuna::registerMethod<LuaFont>(L, "GetLineSpace", &LuaFont::GetLineSpace);
	ELuna::registerMethod<LuaFont>(L, "GetFontHight", &LuaFont::GetFontHight);
	ELuna::registerMethod<LuaFont>(L, "GetFontSize", &LuaFont::GetFontSize);
	ELuna::registerMethod<LuaFont>(L, "GetCharNum", &LuaFont::GetCharNum);
	ELuna::registerMethod<LuaFont>(L, "GetAlign", &LuaFont::GetAlign);
	ELuna::registerMethod<LuaFont>(L, "GetShadowColor", &LuaFont::GetShadowColor);
	ELuna::registerMethod<LuaFont>(L, "GetBorderColor", &LuaFont::GetBorderColor);
	ELuna::registerMethod<LuaFont>(L, "GetP", &LuaFont::GetP);
	ELuna::registerMethod<LuaFont>(L, "GetStringInfo", &LuaFont::GetStringInfo);
	ELuna::registerMethod<LuaFont>(L, "GetRefCount", &LuaFont::GetRefCount);
	ELuna::registerMethod<LuaFont>(L, "AddRef", &LuaFont::AddRef);
	ELuna::registerMethod<LuaFont>(L, "Release", &LuaFont::Release);
	lua_getglobal(L, gname);
	lua_pushnil(L);
	lua_setglobal(L,gname);
	return 1;
}
